<?php
// +----------------------------------------------------------------------
// | 双擎基础框架 [ 基于ThinkLibrary扩展 ]
// +----------------------------------------------------------------------
// | 感谢ThinkLibrary原作者Anyon的封装
// +----------------------------------------------------------------------
// | Copyright (c) 2022~2024 https://www.sqm.la All rights reserved.
// +----------------------------------------------------------------------
// | Author: rotoos <87291030@qq.com>
// +----------------------------------------------------------------------
declare (strict_types=1);

namespace think\admin\model;

use think\admin\Model;

/**
 * 字典模型
 * Class SysDict
 * @package think\admin\model
 */
class SysDict extends Model
{
    /**
     * 字段转驼峰
     * @var bool
     */
    protected $convertNameToCamel = true;

    /**
     * 获取一条信息的详情
     * @param $id
     * @return array|mixed|SysDict|\think\Model
     */
    public static function detail($id)
    {
        return static::mk()->where(['id' => $id])->where(['is_deleted' => 0, 'status' => 0])->findOrEmpty();
    }

    /**
     * 根据 dict_value 获取 dict_label
     * 使用参考BizLabelProcess模型
     * @param string $category 分类
     * @param array|string $values 需要转换的值，可以是单个值或数组
     * @return array|string 转换后的标签，返回数组或单个字符串
     */
    public static function getLabelsByValues($values, string $category)
    {
        if (is_string($values)) {
            $values = explode(',', $values);
        }

        $labels = self::where(['category'=>$category])->whereIn('dict_value', $values)->column('dict_label', 'dict_value');

        // 保持输入顺序
        $result = array_map(function($value) use ($labels) {
            return $labels[$value] ?? $value; // 如果找不到对应的 label，返回原值
        }, $values);

        return is_array($values) ? $result : implode(',', $result);
    }

    /**
     * 验证dict_value值唯一
     * @param $value
     * @param $id
     * @return bool
     */
    public static function isUniqueDictValue($value, $id = null)
    {
        $query = static::where('dict_value', $value);
        if ($id) {
            $query->where('id', '<>', $id);
        }
        return !$query->exists();
    }
}